package main

import (
	"flag"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"strings"
	"sync"
)

// 扩展 http_fetch.go 使之可以从控制台读取 url，使用 12.1 节学到的接收控制台输入的方法

func main() {
	flag.Parse()
	NArg := flag.NArg()
	if NArg < 1 {
		fmt.Fprintln(os.Stderr, "请输入url, 多个url用空格分隔")
		return
	}
	var wg sync.WaitGroup
	wg.Add(NArg)
	for i := 0; i < NArg; i++ {
		url := flag.Arg(i)
		go func() {
			url = strings.TrimLeft(url, "http://")
			url = strings.TrimLeft(url, "https://")
			fmt.Println("fetch url:", url)
			resp, err := http.Get("http://" + url)
			checkErr(err)
			data, err := ioutil.ReadAll(resp.Body)
			checkErr(err)
			file, err := os.Create(url + ".html")
			checkErr(err)

			defer file.Close()
			_, err = file.Write(data)
			checkErr(err)

			fmt.Println("fetch url done")
			wg.Done()
		}()
	}
	wg.Wait()
	fmt.Println("all http fetch done")
}

func checkErr(err error) {
	if err != nil {
		log.Fatal("http.Get fail:", err.Error())
	}
}
